package com.jlf.tool.toolkit;

import java.lang.reflect.Array;
import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * 数组的辅助工具
 *
 * @author wujr
 * 2023/8/7
 * @version 1.0
 * 【变更历史】
 * [wujr 2023/8/7 1.0 新增]
 */
public class ArrayToolkit {
    /**
     * 把collection转换为数组
     * @author wujr
     * 2019-12-20
     * 变更历史
     * [wujr 2019-12-20 1.0 新增]
     *
     * @param collection: 容器
     * @param <T>: 实体类型
     * @return 实体数组
     */
    @SuppressWarnings("unchecked")
    public static <T> T[] collection2Array(Collection<T> collection){
        return collection.toArray((T[]) Array.newInstance(collection.iterator().next().getClass(), 0));
    }
    /**
     * 把列表转换为数组
     * @author wujr
     * 2019/12/20
     * 变更历史
     * [wujr 2019/12/20 1.0 新增]
     *
     * @param list: 列表
     * @param <T>: 数据类型
     * @return 实体数组
     */
    @SuppressWarnings("unchecked")
    public static <T> T[] list2Array(List<T> list){
        return list.toArray((T[])Array.newInstance(list.iterator().next().getClass(), 0));
    }
    /**
     * 生成一个空的数组
     * @author wujr
     * 2020-01-04
     * 变更历史
     * [wujr 2020-01-04 1.0 新增]
     *
     * @param clz: 实体类
     * @param <T>: 实体类型
     * @return 空数组
     */
    @SuppressWarnings("unchecked")
    public static <T> T[] emptyArray(Class<?> clz){
        return (T[])Array.newInstance(clz, 0);
    }
    /**
     * 把集合转换为数组
     * @author wujr
     * 2019-12-20
     * 变更历史
     * [wujr 2019-12-20 1.0 新增]
     *
     * @param set: 集合
     * @param <T>: 数据类型
     * @return 实体数组
     */
    @SuppressWarnings("unchecked")
    public static <T> T[] set2Array(Set<T> set){
        return set.toArray((T[])Array.newInstance(set.iterator().next().getClass(), 0));
    }
}
